package testing;

import static org.junit.Assert.*;
import java.sql.SQLException;
import java.util.ArrayList;
import org.junit.Test;
import acm.*;

public class JunitCasiPrimo {
	private CasiPrimo casiPrimo = new CasiPrimo();

	
	
	/**
	 * Prueba 1.
	 */
	@Test
	public void test1() throws SQLException{
		String output;
		String esperado = "3\n4\n1\n";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1);
		rangoInf.add(1);
		rangoInf.add(1);
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(10);
		rangoSup.add(20);
		rangoSup.add(5);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 2.
	 */
	@Test
	public void test2() throws SQLException{
		String output;
		
		//datos de entrada
		
		String esperado = "false";
		Integer nLineas = null;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1);
		rangoInf.add(1);
		rangoInf.add(1);
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(10);
		rangoSup.add(20);
		rangoSup.add(5);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 3.
	 */
	@Test
	public void test3() throws SQLException{
		String output;
		
		//datos de entrada
		
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= null;

		
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(10);
		rangoSup.add(20);
		rangoSup.add(5);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 4.
	 */
	@Test
	public void test4() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= null;
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(10);
		rangoSup.add(20);
		rangoSup.add(5);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 5.
	 * 
	 */
	@Test
	public void test5() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "3\n5\n7\n";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1);
		rangoInf.add(8);
		rangoInf.add(1);
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(10);
		rangoSup.add(30);
		rangoSup.add(40);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 6.
	 * 
	 */
	@Test
	public void test6() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1);
		rangoInf.add(8);
		rangoInf.add(1);
		
		ArrayList<Integer> rangoSup = null;
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 7.
	 * La variable rangoSup contiene un valor fuera del rango permitido.
	 */
	@Test
	public void test7() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1);
		rangoInf.add(8);
		rangoInf.add(1);
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(-1); //<- fuera del rango permitido
		rangoSup.add(45);
		rangoSup.add(545);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 8.
	 * La variable rangoSup contiene un valor fuera del rango permitido.
	 */
	@Test
	public void test8() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1); 
		rangoInf.add(0); //<- fuera del rango permitido
		rangoInf.add(1);
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(28); 
		rangoSup.add(45);
		rangoSup.add(545);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 9.
	 * La variable rangoSup contiene un valor fuera del rango permitido.
	 */
	@Test
	public void test9() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1); 
		rangoInf.add(4000); //<- fuera del rango permitido
		rangoInf.add(1);
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(28); 
		rangoSup.add(45);
		rangoSup.add(545);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}
	
	/**
	 * Prueba 10.
	 * La variable rangoInf contiene un valor fuera del rango permitido.
	 */
	@Test
	public void test10() throws SQLException{
		String output;
		
		//datos de entrada
		String esperado = "false";
		Integer nLineas = 3;
		ArrayList<Integer> rangoInf= new ArrayList<>();
		rangoInf.add(1); 
		rangoInf.add(323); 
		rangoInf.add(1);
		
		ArrayList<Integer> rangoSup = new ArrayList<>();
		rangoSup.add(28); 
		rangoSup.add(234234);//<- fuera del rango permitido
		rangoSup.add(545);
		output = casiPrimo.contarCasiPrimosRango(nLineas, rangoInf, rangoSup);
		
		assertTrue(output.equals(esperado));
	}

}
